import axios from 'axios'
import router from '@/router/index'

// 设置基础URL，根据实际部署环境进行调整
axios.defaults.baseURL = '/api'
// 携带 cookie，对目前的项目没有什么作用，因为我们是 token 鉴权
axios.defaults.withCredentials = true
// 请求头，headers 信息
axios.defaults.headers['X-Requested-With'] = 'XMLHttpRequest'
axios.defaults.headers['token'] = localStorage.getItem('token') || ''
// 默认 post 请求，使用 application/json 形式
axios.defaults.headers.post['Content-Type'] = 'application/json'

// 请求拦截器
axios.interceptors.request.use(config => {
    // 在发送请求之前做些什么
    config.headers['token'] = localStorage.getItem('token') || ''
    return config
})

// 响应拦截器
axios.interceptors.response.use(res => {
    // 如果返回的数据不是对象格式
    if (typeof res.data !== 'object') {
        ElMessage.error('服务端异常！')
        return Promise.reject(res)
    }

    // 根据后端约定的响应结构处理
    if (res.data.code != 200) {
        // 特别处理 token 过期或无效的情况
        if (res.data.code == -209 || res.data.code == -210) {
            // 清除本地存储的过期 token
            localStorage.removeItem('token')
            // 跳转到登录页
            router.push('/login')
            ElMessage.error('登录已过期，请重新登录')
        }
        ElMessage.error(res.data.msg)
        return Promise.reject(res.data)
    }

    return res.data
})

export default axios
